// 枚举类型通过 enum 关键字来定义，它和联合类型实现的功能类似，但是枚举类型的代码阅读性会更强一些
enum Direction {
    LEFT,
    RIGHT,
    TOP,
    BOTTOM,
}

function turnDirection(direction: Direction) {
    switch (direction) {
        case Direction.LEFT:
            break;
        case Direction.RIGHT:
            break;
        case Direction.TOP:
            break;
        case Direction.BOTTOM:
            break;
        default:
            const foo: never = direction;
            break;
    }
}
turnDirection(Direction.LEFT);
//type实现上功能
type Direction2 = 'left' | 'right' | 'center'
function turnDirection2(direction: Direction2) {
    switch (direction) {
        case 'left':
            console.log("调用left方法"); break;
        case 'right':
            console.log("调用right方法"); break;
        case 'center':
            console.log("调用center方法"); break;
        default:
            console.log("调用默认方法"); break;
    }
}
turnDirection2('right');

//枚举的值
//我们也可以赋值给枚举变量其他类型
// 默认情况下，枚举是基于 0 的，也就是说第一个值是 0，后面的值依次递增。不要担心，当中的每一个值都可以显式指定，只要不出现重复即可，没有被显式指定的值，都会在前一个值的基础上递增。
enum Direction3 {
    LEFT = 0,
    RIGHT = 1,
    TOP = 3,
    BOTTOM = 4,
}

enum Direction4{
    LEFT = 100,
    RIGHT , //101
    TOP ,   //102
    BOTTOM ,    //103
}

enum Direction5{
    LEFT ,  //0
    RIGHT , //1
    TOP ="TOP",   //102
    BOTTOM="BOTTOM" ,    //103
}
let d5:Direction5 = Direction5.LEFT
console.log(d5);//0
